/*
 * Copyright (c) 2023 Cshoo Org. All Rights Reserved.
 */

package org.cshoo.tattoo.datacenter.domain.repository;

import org.cshoo.tattoo.datacenter.domain.po.LookupItem;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

import javax.transaction.Transactional;
import java.util.List;

/**
 * @author 杨翼
 * @since 1.0
 */
public interface ILookupItemRepository extends CrudRepository<LookupItem, Long> {

    /**
     * 根据lookupId查询item列表
     *
     * @return item列表
     */
    List<LookupItem> findByLookupIdOrderByOrder(Long lookupId);

    /**
     * 根据lookupId查询item列表
     *
     * @param lookupId lookupId
     * @param pageable 分页参数
     * @return item列表
     */
    Page<LookupItem> findByLookupIdOrderByOrder(Long lookupId, Pageable pageable);

    /**
     * 根据lookupId查询item列表
     *
     * @return item列表
     */
    LookupItem findByCodeAndLookupId(String code, Long lookupId);

    /**
     * 根据lookupId删除lookup项
     *
     * @param lookupId lookupId
     */
    void deleteByLookupId(Long lookupId);

    /**
     * 修改lookup item
     *
     * @param lookupItem lookup item
     */
    @Query("update LookupItem lookupItem set lookupItem.name = :#{#lookupItem.name}, lookupItem.description = :#{#lookupItem.description} , lookupItem.lastModifiedDate = :#{#lookupItem.lastModifiedDate} where lookupItem.id = :#{#lookupItem.id}")
    @Transactional
    @Modifying
    void updateLookupItem(LookupItem lookupItem);
}
